#include <iostream>
#include <stack>
#include <string>
#include <stdlib.h>

using namespace std;

template<class T>
class Operador{
	public:
		Operador(string, T (*op)(T,T));
		T Operar(T x,T y);
		bool Identificar(string s);
		string getIdentificador();
	private:
		string identificador;
		T (*operar)(T,T);
};

template <class T>
Operador<T>::Operador(string id,T (*op)(T,T)){
	identificador=id;
	operar=op;
}

template <class T>
T Operador<T>::Operar(T x, T y){
	return operar(x,y);
}

template <class T>
bool Operador<T>::Identificar(string s){
	if (!identificador.compare(s))
		return true;
	return false;
}

template <class T>
string Operador<T>::getIdentificador(){
	return identificador;
}




int _suma(int x, int y){
	return x+y;
}

int _resta(int x, int y){
	return x-y;
}


int _mult(int x, int y){
	return x*y;
}


int _division(int x, int y){
	return x/y;
}


int main(){
	string s;
	Operador<int> suma("+",&_suma),resta("-",&_resta),multiplicacion("*",&_mult),division("/",&_division),operadores[]={suma,resta,multiplicacion,division};
	int operadores_disponibles=4;
	while(getline(cin,s)){  // Found on http://stackoverflow.com/questions/201992/how-to-read-until-eof-from-cin-in-c
		string::iterator it;
		stack<int> proposiciones;
		stack< Operador<int> > operaciones;
		for (it=s.begin();it<s.end();it++){
			if (*it > 47 && *it < 57 ){ //Si encuentra un número lea
				string operando(1,*it);
				it++;
				while (*it > 47 && *it < 57){ //Lea hasta que encuentre algo diferente a un número para los números de más de un digito
					operando=operando+*it;
					it++;
				}
				it--; //Deje el iterador en la posición en la que encontró algo diferente a un número para que ese algo sea interpretado en el siguiente ciclo
				proposiciones.push(atoi(operando.c_str())); //Meta al stack el número que encontró
				continue;
			}
			if (*it ==  41){
				int op2=proposiciones.top();
				proposiciones.pop();
				int op1=proposiciones.top();
				proposiciones.pop();
				Operador<int> aplicar=operaciones.top();
				proposiciones.push(aplicar.Operar(op1,op2));
				cout << "[DEBUG] Operacion realizada: " << op1 << " " << aplicar.getIdentificador() << " " << op2 << endl;
				operaciones.pop();
				continue;
			}
			for (int i=0;i<operadores_disponibles;i++){
				string cadena_operador(1,*it);
				if (operadores[i].Identificar(cadena_operador)){
					operaciones.push(operadores[i]);
					break;
				}
			}
		}
		cout << proposiciones.top() << endl;
		proposiciones.pop();
	}
}
